home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / PluginSRC_EvenMore / wordwrap2.e < prev   
Text File  |  2002-03-12  |  3KB  |  142 lines

  1. /*
  2.    MSWord2Text
  3.    EvenMore FileIO plugin
  4.    Author: Chris Perver
  5.    Copyright (c) 2001
  6. */
  7.  
  8.  
  9. OPT REG=5
  10.  
  11. LIBRARY 'wordwrap.plugin',1,1,'Wordwrap 1.01' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
  12.  
  13. MODULE 'tools/ctype', '*epo'
  14.  
  15. DEF mem2:PTR TO CHAR->, mswvers
  16.  
  17.  
  18. PROC em_isdatatype(memadr, lenadr)
  19.   DEF c = 0, linewidth = 0, newlines = 0
  20.  
  21.   -> FIND IF WE ACTUALLY NEED TO WORDWRAP THIS FILE
  22.  
  23.   WHILE (c < lenadr)
  24.     SELECT 256 OF memadr[c]
  25.       CASE "\e"
  26.         IF memadr[c + 1] = "["
  27.           c := c + 2
  28.           WHILE ((memadr[c] >= $30) AND (memadr[c] <= $3B))
  29.             INC c
  30.           ENDWHILE
  31.         ENDIF
  32.         INC c
  33.       CASE "\n"
  34.         linewidth := 0
  35.       CASE "\b"
  36.         IF memadr[c+1] = "\n" THEN INC c
  37.         linewidth := 0
  38.       DEFAULT
  39.         INC linewidth
  40.         IF (linewidth > 81)
  41.           INC newlines
  42.           linewidth := 0
  43.         ENDIF
  44.     ENDSELECT
  45.     INC c
  46.   ENDWHILE
  47. ENDPROC newlines
  48.  
  49. PROC em_parsedata(epo:PTR TO em_pluginobj)
  50.   DEF memadr:PTR TO CHAR, lenadr
  51.   DEF count = 0, count2 = 0
  52.   DEF currchar = 0
  53.   DEF notdone = TRUE
  54.   DEF wordwrap = 81, oldpos, oldcc
  55.  
  56.   memadr := epo.buffer
  57.   lenadr := epo.length
  58.   mem2   := epo.nbuffer
  59.  
  60.   notdone := TRUE
  61.  
  62.   WHILE notdone AND (count < lenadr)
  63.  
  64.     SELECT 256 OF memadr[count]
  65.       CASE "\e"
  66.         IF memadr[count + 1] = "["
  67.           mem2[count2++] := memadr[count++]
  68.           mem2[count2++] := memadr[count++]
  69.  
  70.           WHILE ((memadr[count] >= $30) AND (memadr[count] <= $3B))
  71.             mem2[count2++] := memadr[count++]
  72.            -> INC charcount
  73.           ENDWHILE
  74.         ENDIF
  75.         ->INC charcount
  76.         mem2[count2++] := memadr[count]
  77.       CASE "\b", "\n"
  78.         mem2[count2++] := memadr[count]
  79.         currchar := 0
  80.       DEFAULT
  81.         mem2[count2++] := memadr[count]
  82.         INC currchar
  83.  
  84.         IF currchar >= wordwrap
  85.           -> Find last space
  86.           IF isspace(mem2[count2]) = TRUE
  87.             mem2[count2++] := "\n"
  88.             currchar := 0
  89.           ELSE
  90.             oldpos := count2
  91.             oldcc  := currchar
  92.             WHILE isspace(mem2[count2]) = FALSE
  93.               mem2[count2 + 1] := mem2[count2]
  94.               DEC count2
  95.               DEC currchar
  96.             ENDWHILE
  97.  
  98.             INC count2
  99.             mem2[count2] := "\n"
  100.             currchar := oldcc - currchar
  101.  
  102.            count2 := oldpos + 1
  103.          ENDIF
  104.        ENDIF
  105.     ENDSELECT
  106.     INC count
  107.   ENDWHILE
  108.  
  109.   mem2[count2]   := "\n"
  110. ENDPROC mem2, count2
  111. -><
  112.  
  113. -> *** STANDARD PROCS FOR PLUGINS
  114.  
  115.  
  116. PROC em_main(epo:PTR TO em_pluginobj)
  117.     DEF len2
  118.     mem2, len2 := em_parsedata(epo)
  119.     epo.nlength := len2
  120.     RETURN TRUE
  121. ENDPROC
  122.  
  123. PROC em_begin(epo:PTR TO em_pluginobj)
  124.   DEF extralines
  125.   extralines := em_isdatatype(epo.buffer, epo.length)
  126.   IF extralines > 0
  127.     RETURN "MEM", (epo.length * 2)
  128.   ELSE
  129.     RETURN FALSE
  130.   ENDIF
  131. ENDPROC
  132.  
  133. PROC em_end()      IS EMPTY
  134.  
  135. PROC em_info()     IS 'Wordwrap 1.01'
  136.  
  137. PROC em_pluginid() IS "FRMT"
  138.  
  139. PROC em_format()   IS 'Wordwrap'
  140.  
  141. PROC main()        IS EMPTY
  142.